package com.gl.punto;

import com.gl.punto.proyectopuntomaven.*;
import java.util.Iterator;

public class TableroTxt extends Pantalla {
	private static final String RELLENO = "*";
	private static final String ESPACIO = " ";
	private static final String MARCOVERTICAL = "|";
	private static final String MARCOHORIZONTAL = "-";

	private String matriz[][];

	//constructor, recibe base, altura y punto inicial del tablero
	public TableroTxt(int basePantalla, int alturaPantalla, Punto punto) {
		super(basePantalla, alturaPantalla, punto);
		//matriz [altura][base]
		matriz = new String[alturaPantalla + 2][basePantalla + 2];
	}

	//dibuja
	public void dibujar() {
		marcoPantalla();
		marcoTablero();
		dibujarPantalla();
	}
	
	//hace el marco de la pantalla
	private void marcoPantalla() {
		//fila = altura
		//col = base
		for (int fila = 0; fila <= altura + 1; fila++) {
			for (int col = 0; col <= base + 1; col++) {
				if (fila == 0) {
					matriz[fila][col] = MARCOHORIZONTAL;
				} else if (fila == altura + 1) {
					matriz[fila][col] = MARCOHORIZONTAL;
				} else if (col == 0) {
					matriz[fila][col] = MARCOVERTICAL;
				} else if (col == base + 1) {
					matriz[fila][col] = MARCOVERTICAL;
				} else {
					matriz[fila][col] = ESPACIO;
				}
			}
		}
	}

	//hace el marco del tablero
	private void marcoTablero() {
		Iterator<Tablero> it = super.getTableros().iterator();
		while (it.hasNext()) {
			Tablero tablero = it.next();
			rellenarMarcoTablero(tablero);
			rellenarTablero(tablero);
		}
	}
	
	private void rellenarMarcoTablero(Tablero tablero) {
		int inicioCol = tablero.getPuntoInicial().getCordenadaX();
		int finFila = tablero.getPuntoFinal().getCordenadaY();
		int inicioFila = tablero.getPuntoInicial().getCordenadaY();
		int finCol = tablero.getPuntoFinal().getCordenadaX();
		//fila = altura
		//col = base
		for (int fila = inicioFila; fila <= finFila + 1; fila++) {				
			for (int col = inicioCol; col <= finCol + 1; col++) {
				if (fila == inicioFila) {
					matriz[fila][col] = MARCOHORIZONTAL;
				} else if (fila == finFila + 1) {
					matriz[fila][col] = MARCOHORIZONTAL;
				} else if (col == inicioCol) {
					matriz[fila][col] = MARCOVERTICAL;
				} else if (col == finCol + 1) {
					matriz[fila][col] = MARCOVERTICAL;
				} else {
					matriz[fila][col] = ESPACIO;
				}
			}
		}
	}
	
	private void rellenarTablero(Tablero tablero){
		int inicioCol = tablero.getPuntoInicial().getCordenadaX();
		int finFila = tablero.getPuntoFinal().getCordenadaY();
		int inicioFila = tablero.getPuntoInicial().getCordenadaY();
		int finCol = tablero.getPuntoFinal().getCordenadaX();		
		//fila = altura
		//col = base
		for (int fila = 1; fila < tablero.getAltura(); fila++) {
			for (int col = 1; col < tablero.getBase(); col++) {
				boolean flagDibujar = false;
				Iterator<Dibujable> it = tablero.getDibujos().iterator();
				while (it.hasNext() && !flagDibujar) {
					Dibujable d = it.next();
					flagDibujar = d.siEsta(new Punto(col, fila));
				}
				if (flagDibujar) {
					matriz[fila + inicioFila][col + inicioCol] = RELLENO;
				} else {
					matriz[fila + inicioFila][col + inicioCol] = ESPACIO;
				}
			}
		}
	}
	
	// dibuja cuerpo del tablero con los Dibujables dentro
	private void dibujarPantalla() {		
		System.out.println(armarString());
	}
	
	public String armarString(){
		String cadenaAImprimir = "";
		for (int fila = 0; fila <= altura + 1; fila++) {
			for (int col = 0; col <= base + 1; col++) {
				cadenaAImprimir = cadenaAImprimir + matriz[fila][col];
			}
			cadenaAImprimir = cadenaAImprimir + "\n";
		}
		return cadenaAImprimir;
	}
}
